老手写代码

不要重复

原则: 重复出现了3次的内容,要重构,DRY。

某个controller : 

  def edit
    @article_category = ArticleCategory.find(params[:id])
  end

  def update
    @article_category = ArticleCategory.find(params[:id])
    @article_category.name = params[:article_category][:name]
    @article_category.save
    redirect_to article_categories_path
  end

  def destroy
    @article_category = ArticleCategory.find(params[:id])
    @article_category.delete
    redirect_to article_categories_path
  end

要改成:

  before_action :get_by_id, :only => [:edit,update, :destroy]

  def edit
  end

  def update
    @article_category.name = params[:article_category][:name]
    @article_category.save
    redirect_to article_categories_path
  end

  def destroy
    @article_category.delete
    redirect_to article_categories_path
  end
  private
  def get_by_id
    @article_category = ArticleCategory.find(params[:id])
  end

一种搜索页的查询模式:

下面这种页面写起来太恐怖, 重复的太多了:

  def show_index
    @categories = ArticleCategory.all
    if params[:title1].present?
      @one_articles = Article.all.joins(:article_category).where(:article_category_id=>@categories[0].id).where("title like '%#{params[:title1]}%'")
    else
      @one_articles = Article.all.joins(:article_category).where(:article_category_id=>@categories[0].id)
    end
  end

如何重构呢? 要了解, rails的查询,是一种查询专用语言。(DSL)。 要理解:

Article.where().where().page().per()

等同于:

Article.page().per().where().where()

他们的顺序,不是严格按照出现的顺序执行的。 而是大部分时间,跟顺序无关的。 只有在 调用 .all的时候,才会真正查询数据库。

所以,上面的代码,我们要改。

  def show_index
    @categories = ArticleCategory.all

    @one_articles = Article.joins(:article_category).where(:article_category_id=>@categories[0].id)
    @one_articles = @one_articles.where("title like '%#{params[:title1]}%'") if params[:title1].present?

  end

不要节省空间

不要这样写: 

{ :x => @x_axis, :y => @daily_pvs }

要这样写: 

{
  :x => @x_axis,
  :y => @daily_pvs
}

migration comment

要加上注释, 例如:

      t.string :title, comment:"文章标题, 例如: 《缓存的使用》"
      t.string :author, comment:"文章作者, 例如: 王同学"
      t.string :content, comment:"文章内容, 例如:<div>lalala</div>"
      t.belongs_to :article_category, comment:"与文章分类表关联"

results matching ""

    No results matching ""